package controller;

import interfaces.ControlaJogo;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;
import model.Peao;
import rmi.RMIServer;

/**
 * Classe responsável pelo receber atualizações do servidor para o tabuleiro
 * A classe implementa o padrão de projeto Singleton para garantir um unico observer
 * @author Adriano
 */
public class ControllerObserver extends UnicastRemoteObject implements ControlaJogo{
    private ControlaJogo controlaJogo;
    private static ControllerObserver controllerObserver;
    
    public ControllerObserver() throws RemoteException{
        try {
            RMIServer.getInstacia().getAddObservador().adicionaObservador(this);
        } catch (Exception e) {}
    }

    public void setControlaJogo(ControlaJogo controlaJogo) {
        this.controlaJogo = controlaJogo;
    }
    
    public static ControllerObserver getControllerObserver() {
        if (controllerObserver == null) {
            try {
                controllerObserver = new ControllerObserver();
            } catch (Exception e) {}
        }
        return controllerObserver;
    }
    
    @Override
    public void liberarTela(boolean status) throws RemoteException {
        controlaJogo.liberarTela(status);
    }

    @Override
    public void jogadoresLista(String jogadores) throws RemoteException {
        controlaJogo.jogadoresLista(jogadores);
    }

    @Override
    public void escreveTeste(String str) throws RemoteException {
        System.out.println(str);
        controlaJogo.escreveTeste(str);
    }

    @Override
    public void listaPeao(List<Peao> lista) throws RemoteException {
        controlaJogo.listaPeao(lista);
    }

    @Override
    public void vesdeJogada(String jogadorNome) throws RemoteException {
        controlaJogo.vesdeJogada(jogadorNome);
    }

    @Override
    public void mensagem(String nome, String mensagem) throws RemoteException {
        controlaJogo.mensagem(nome, mensagem);
    }

    @Override
    public void comprar(String nome, String campo) throws RemoteException {
        controlaJogo.comprar(nome, campo);
    }

    @Override
    public void intensaoCompra(String jogadorDono, String jogadorInteresado, String campo, String valor) throws RemoteException {
       controlaJogo.intensaoCompra(jogadorDono, jogadorInteresado, campo, valor);
    }
}
